const express = require('express');
const cors = require('cors');
const helmet = require('helmet');
const morgan = require('morgan');
const path = require('path');
const fs = require('fs');

// 加载生产环境配置
const config = require('./config.production');

const app = express();

// 安全中间件
app.use(helmet());

// CORS配置
app.use(cors(config.cors));

// 日志配置
const logDir = path.join(__dirname, 'logs');
if (!fs.existsSync(logDir)) {
  fs.mkdirSync(logDir);
}

// 生产环境日志
app.use(morgan('combined', {
  stream: fs.createWriteStream(path.join(logDir, 'access.log'), { flags: 'a' })
}));

// 请求体解析
app.use(express.json({ limit: '10mb' }));
app.use(express.urlencoded({ extended: true, limit: '10mb' }));

// 静态文件服务（如果前端构建文件放在这里）
app.use(express.static(path.join(__dirname, 'public')));

// API路由
app.use('/api/users', require('./routes/user'));
app.use('/api/samples', require('./routes/yaopin'));

// 健康检查接口
app.get('/health', (req, res) => {
  res.json({ 
    status: 'ok', 
    timestamp: new Date().toISOString(),
    uptime: process.uptime()
  });
});

// 404处理
app.use('/api/*', (req, res) => {
  res.status(404).json({ error: 'API接口不存在' });
});

// 前端路由处理（SPA应用）
app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname, 'public', 'index.html'));
});

// 错误处理中间件
app.use((err, req, res, next) => {
  console.error('服务器错误:', err);
  res.status(500).json({ 
    error: '服务器内部错误',
    message: process.env.NODE_ENV === 'development' ? err.message : '请联系管理员'
  });
});

const PORT = config.server.port;
const HOST = config.server.host;

app.listen(PORT, HOST, () => {
  console.log(`🚀 生产环境服务器启动成功`);
  console.log(`📍 服务地址: http://${HOST}:${PORT}`);
  console.log(`🌍 环境: ${process.env.NODE_ENV || 'production'}`);
  console.log(`⏰ 启动时间: ${new Date().toISOString()}`);
});

// 优雅关闭
process.on('SIGTERM', () => {
  console.log('收到 SIGTERM 信号，正在关闭服务器...');
  process.exit(0);
});

process.on('SIGINT', () => {
  console.log('收到 SIGINT 信号，正在关闭服务器...');
  process.exit(0);
}); 